#将来的你一定会感激现在拼命的自己
import sqlite3


# 定义一个创建表的函数
def create_table():
    # UNIQUE:表示该字段的值是唯一的
    # NOT NULL:表示字段值不允许为空
    # IF NOT EXISTS:当表不存在时，再执行创建表的sql语句，如果表已经存在，则sql语句不再执行，可以避免异常
    #               创建   表  如果 不  存在      表名   id  整数       值        独特的   名称
    create_sql = "create table if not exists student(id INTEGER PRIMARY KEY UNIQUE ,name TEXT,age INTEGER ,score FLOAT )"
    # 光标  执行
    cursor.execute(create_sql)


# 定义一个添加学员的函数
def add_student():
    name = input('请输入姓名:')
    age = int(input('请输入年龄:'))
    score = float(input('请输入分数:'))
                 # 插入   进入 学生列表                  值
    insert_sql = "insert into student(name,age,score)VALUES ('%s',%d,%.1f)" % (name, age, score)
    cursor.execute(insert_sql)


def get_total_count():
    select_sql = 'select count(*) from student'  # select=选择 count(*)所有  from(从) student表
    res = cursor.execute(select_sql) # 光标执行
    count = res.fetchone()[0] #  fetchone 返回单个元组 返回 下标
    return count



# 定义一个查询学员信息的函数
def select_student_info():
    count = get_total_count()  # 调用上面的函数
    if count != 0:
        # 如果is_total_number==True就查询表中的数据总量
        # 如果is_total_number==False就查询表中的数据的详细信息
        select_sql = 'select * from student'   #选择 所有 从  学生表
        result_list = cursor.execute(select_sql) # 光标 执行
        for id, name, age, score in result_list:  # 循环
            print(id, '.', name, age, score)
    else:
        print('学员信息为空，无法查询')


# 定义一个修改学员信息的函数
def update_student_info():
    count = get_total_count()  #　调用上面的函数
    if count != 0:
        # 修改之前先把所有的学员信息先查询出来
        select_student_info()
        select_number = int(input('请输入要修改的学员的编号：'))
        while test(select_number) == False:
            select_number = int(input('输入的学员编号错误，请重新输入:'))
        # 知道了要修改的学员的编号，然后进行修改。
        new_name = input('请输入修改后的姓名:')
        new_age = int(input('请输入修改后的年龄：'))
        new_score = float(input('请输入新的分数：'))
        update_sql = "update student set name='%s',age=%d,score=%.1f where id=%d" % (
        new_name, new_age, new_score, select_number)
        cursor.execute(update_sql)
    else:
        print('学员信息为空，无法修改')



# 定义一个删除学员信息的函数

def test(number):
    select_sql = "select * from student WHERE id=%d" % number
    res = cursor.execute(select_sql)
    result = res.fetchall()
    return len(result)

def delete_student_info():
    count = get_total_count()
    if count != 0:
        print('1-删除指定学员的信息')
        print('2-删除所有学员信息')


def delete_student_info():
    count = get_total_count()
    if count != 0:
        print('1-删除指定学员的信息')
        print('2-删除所有学员信息')
        select_number = int(input('请输入要操作的序号：'))
        while select_number != 1 and select_number != 2:
            select_number = int(input('请重新输入你要操作的序号:'))
        # 如果用户选择的是1，说明用户想要删除指定的学员信息
        if select_number == 1:
            select_student_info()
            number = int(input('请输入要删除的学员编号：'))
            while test(number) == False:
                number = int(input('学员编号输入错误，请重新输入要删除的学员编号：'))
            delete_sql = "delete from student where id =%d" % number
        else:
            delete_sql = 'delete from student'
        cursor.execute(delete_sql)
    else:
        print('学员信息为空')

if __name__ == '__main__':
    while True:
        print('''
        1-添加学员信息
        2-修改学员信息
        3-查询学员信息
        4-删除学员信息
        0-退出程序
        ''')      #数据库好、
        connect = sqlite3.connect('student_def.db')
        cursor = connect.cursor()   # 链接 游标
        create_table()   #调用 创建表的函数
        select_number = int(input('请输入要操作的序号：'))  # 输入序号
        while select_number < 0 or select_number > 4:
            select_number = int(input('序号输入错误，请重新输入要操作的序号：'))  # 判断输入的序号
        if select_number == 1:
            add_student()
        elif select_number == 2:
            update_student_info()
        elif select_number == 3:
            select_student_info()
        elif select_number == 4:
            delete_student_info()
        else:
            break
        connect.commit()  # 游标  提交
        cursor.close()   # 游标 关闭
        connect.close()  # 链接 关闭   关闭释放资源
